var store;
var grid;
var featureWin;
var featureForm;
var featureWinAction = '';
var featureId = 0;
var featureTitle = '';

Ext.onReady(function() {

    // create the Data Store
    store = new Ext.data.JsonStore({
        root: 'features',
        totalProperty: 'totalCount',
        idProperty: 'id',
        remoteSort: true,

        fields: [
            'id', 'title', 'actions'
        ],

        // load using script tags for cross domain, if the data in on the same domain as
        // this page, an HttpProxy would be better
        proxy: new Ext.data.ScriptTagProxy({
            url: '/admin/hotelfeature/getdata/'
        })
    });
    store.setDefaultSort('title', 'asc');

    grid = new Ext.grid.GridPanel({
        width:600,
        height:530,
        title:'Фишки отеля',
        store: store,
        trackMouseOver:false,
        disableSelection:true,
        loadMask: {msg: 'Загрузка...'},

        // grid columns
        columns:[{
            id: 'id', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header: "ID",
            dataIndex: 'id',
            width: 60,
            sortable: true,
			align: 'center'
        },{
            header: "Название",
            dataIndex: 'title',
			align: 'left',
            sortable: true,
			width:420
        },{
            header: "Действия",
            dataIndex: 'actions',
			align: 'center',
            width: 120,
            sortable: false
        }
		],
		
        // customize view config
        viewConfig: {
            forceFit:true,
            enableRowBody:true,
            showPreview:false,
            getRowClass : function(record, rowIndex, p, store){
                if(this.showPreview){
                    p.body = '<p>'+record.data.excerpt+'</p>';
                    return 'x-grid3-row-expanded';
                }
                return 'x-grid3-row-collapsed';
            }
        },

        // paging bar on the bottom
        bbar: new Ext.PagingToolbar({
            pageSize: 20,
            store: store,
            displayInfo: true,
			beforePageText: 'Страница',
			afterPageText: 'из {0}',
            displayMsg: 'Показаны {0} - {1} из {2}',
            emptyMsg: "Нет данных",
            items:['-']
        }),
		
		tbar: [{
            text: 'Создать',
			iconCls: 'silk-add',
            handler : function(){
                featureForm.items.last().setValue('');
				featureWinAction = 'create';
				featureWin.setTitle('Создать');
				featureWin.show();
				featureWin.center();
            }
        }],
		
		sm: new Ext.grid.RowSelectionModel({singleSelect:true})
    });
	
	Ext.apply(Ext.grid.GridView.prototype, {
		sortAscText  : "Сортировать по возрастанию",
    	sortDescText : "Сортировать по убыванию",
    	lockText     : "Закрепить столбец",
    	unlockText   : "Снять закрепление столбца",
    	columnsText  : "Столбцы"
  	});
	
	featureWin = new Ext.Window({
		title: "Создать",
		closable: false,
		width: 600,
		height: 150,
		resizable: false,
		plain: false,
		padding: "15",
		constrain: false,
		hideCollapseTool: false,
		footer: false,
		shadow: true,
		bodyBorder: false,
		items: [featureForm = new Ext.form.FormPanel({
			title: "My Form",
			labelWidth: 150,
			labelAlign: "left",
			layout: "form",
			titleCollapse: false,
			header: false,
			height: 90,
			frame: true,
			border: false,
			animCollapse: true,
			hideBorders: false,
			items: [{
				xtype: "textfield",
				fieldLabel: "Название",
				anchor: "90%",
				name: "title",
				hideLabel: false,
				allowBlank: false,
				blankText: "Поле не может быть пустым"
			}],
			buttons: [{
				xtype: "button",
				text: "Сохранить",
				type: "submit",
				handler: function() {
					if (featureWinAction == 'create') {
						var fp = this.ownerCt.ownerCt, form = fp.getForm();
						if (form.isValid()) {
							form.submit({
								url: '/admin/hotelfeature/save/',
								success: function(form, action){
									form.reset();
									featureWin.hide();
									store.reload();
									
									Ext.confpopup.msg('Новая фишка создана', '');
								}
							});
						}
					} else if (featureWinAction == 'edit') {
						var fp = this.ownerCt.ownerCt, form = fp.getForm();
						if (form.isValid()) {
							form.submit({
								url: '/admin/hotelfeature/update/id/' + featureId + '/',
								success: function(form, action){
									var responseTxt = Ext.util.JSON.decode(action.response.responseText);

									form.reset();
									featureWin.hide();
									store.getById(featureId).data.title = responseTxt.title;
									grid.getView().refresh();
									
									Ext.confpopup.msg('Фишка отредактирована', '');
								}
							});
						}
					}
				}
			}, {
				xtype: "button",
				text: "Отмена",
				handler: function(){
					var fp = this.ownerCt.ownerCt, form = fp.getForm();
					form.reset();
					featureWin.hide();
				}
			}]
		})]
	});
	
	featureWin.on('beforeshow', function (obj) {
		Ext.get('msg-div-casper').slideIn();
	});
	
	featureWin.on('beforehide', function (obj) {
		Ext.get('msg-div-casper').slideOut();
	});

	Ext.DomHelper.insertFirst(document.body, {id:'msg-div-casper', cls:'ext-el-mask'}, true);

    // render it
    grid.render('hotelgrid');

    // trigger the data store load
    store.load({params:{start:0, limit:20}});
});

function editFeature(id)
{
	featureId = parseInt(id);
	featureTitle = htmlspecialchars_decode(Ext.util.Format.stripTags(store.getById(featureId).data.title));
	featureForm.items.last().setValue(featureTitle);
	
	featureWinAction = 'edit';
	featureWin.setTitle('Редактировать');
	featureWin.show();
	featureWin.center();
}

function deleteFeature(id)
{
	Ext.Ajax.request({
   		url: '/admin/hotelfeature/checkhotels/id/' + parseInt(id) + '/',
   			success: function(response, opts) {
				var obj = Ext.decode(response.responseText);
				Ext.MessageBox.buttonText.yes = 'Да';
				Ext.MessageBox.buttonText.no  = 'Нет';
				if (parseInt(obj.countHotels) > 0) {
					Ext.MessageBox.minWidth = 500;		
					Ext.MessageBox.confirm('Предупреждение!', 'Данная фишка привязана к следующим отелям:' + obj.hotelString + 'Действительно удалить фишку?', function (btn) {
						if (btn == 'yes') {
							ajaxRemove(id);
						}
					});					
				} else {
					Ext.MessageBox.minWidth = 350;
					Ext.MessageBox.confirm('Предупреждение!', 'Фишка не привязана ни к одному отелю. Действительно хотите удалить фишку?', function (btn) {
						if (btn == 'yes') {
							ajaxRemove(id);
						}
					});
				}
			},
   			failure: function() {},
			disableCaching: false
	});
}

function ajaxRemove(id)
{
	Ext.Ajax.request({
   		url: '/admin/hotelfeature/remove/id/' + parseInt(id) + '/',
   		success: function() {
			store.remove(store.getById(parseInt(id)));
			Ext.confpopup.msg('Фишка удалена', '');
			store.reload();
		},
   		failure: function() {},
		disableCaching: false
	});	
}